{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   ##  1. 画图解释图像卷积滤波的基本原理，并进一步简述常见的图像平滑滤波算法。\n",
    "     \n",
    "       图像滤波即为图像卷积，其基本原理是对图像像素进行卷积运算。\n",
    "       卷积运算可以看作是加权求和的过程，使用到的图像区域中的每个像素分别于权矩阵的每个元素对应相乘，所有乘积之和作为区域中心像素的新值。 \n",
    "![卷积示例.png](https://img-blog.csdn.net/20151012211045222?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)\n",
    "\n",
    "       图像平滑滤波指的是图像操作进行噪声去除，常见的图像平滑滤波算法   \n",
    "       有：平均滤波，高斯滤波，中值滤波，高斯滤波最为常用。\n",
    "       \n",
    "   ### 平均滤波\n",
    "![平均滤波原理.png](https://img-blog.csdnimg.cn/20190529133918132.png)\n",
    "       \n",
    "![常见3种.png](https://img-blog.csdnimg.cn/20190529133929889.png)       \n",
    "       如4领域，8邻域滤波器， 其中的1/5,1/8,1/9分别对应滤波器中非零元素的个数\n",
    "   ### 加权平均滤波（高斯滤波）\n",
    "![加权滤波原理.png](https://img-blog.csdnimg.cn/20190529134220302.png)\n",
    "\n",
    "![加权滤波器.png](https://img-blog.csdnimg.cn/20190529134231175.png)\n",
    "       对比平均滤波在前面系数上不同，同时增加了归一化处理的系数W，图像中心点的权重大，所以滤波器在中心赋予更高的权值，\n",
    "       周围的权重小且对称，在图形上看类似于草帽，形如高斯分布。\n",
    "  ### 中值滤波\n",
    "![中值滤波.png](https://img-blog.csdnimg.cn/20190529134456362.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMxMjM5NDk1,size_16,color_FFFFFF,t_70)\n",
    "       中值滤波可以消除图像中的长尾噪声，例如负指数噪声和椒盐噪声。是一种非线性滤波，与平均滤波，高斯滤波不同，没有固定的图像处理\n",
    "       模板，通过比较一定邻域内的灰度值大小来实现，用模板内所包括像素灰度的中值来取代模板中心像素的灰度。窗口只能存在奇数个像素，        偶数无法使用，常用3*3、5*5.\n",
    "\n",
    "   ##   2. 简述边缘检测的基本原理，以及Sobel、LoG和Canny算子的原理差异。\n",
    "   \n",
    "        边缘检测的本质是微分，由于像素值是离散的数值所以实际操作中使用差分运算。\n",
    "  ###  Sobel算子\n",
    "![算子模板.png](https://img-blog.csdn.net/20150630201146812)\n",
    "        sobel算子该算子包含两组3x3的矩阵，分别为横向及纵向，将之与图像作平面卷积，即可分别得出横向及纵向的亮度差分近似值。如果以A         代表原始图像，Gx及Gy分别代表经纵向及横向边缘检测的图像\n",
    "        \n",
    "        python实现\n",
    "        \n",
    "        dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]]) \n",
    "        #src表示输入图像\n",
    "        #dst输出图像\n",
    "        #输出图像的深度，输入输出图像深度对比，一般选择 -1 或者CV_16S, CV_32F, CV_64F\n",
    "        #dx x方向上的差分阶数\n",
    "        #dy y方向上的差分阶数\n",
    "        #ksize，sobel卷积核大小，默认是3， 可以取1,3,5,7\n",
    "        #scale表示缩放，默认是1，没有缩放\n",
    "        #delta，默认值0\n",
    "        #边界模式，默认BORDER_DEFAUL\n",
    "\n",
    "        dst = cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])  \n",
    "        分方向计算后重新组合\n",
    "        #alpha是第一幅图片中元素的权重\n",
    "        #beta是第二个的权重\n",
    "        #gamma是加到最后结果上的一个值\n",
    "  ### LoG算子\n",
    "        Laplace算子对通过图像进行操作实现边缘检测对离散点和噪声比较敏感，于是先对图像进行高斯卷积滤波进行降噪，再采用Laplace算进行边缘检测，就可以提高算子对噪声和离散点的Robust，由于其数学性质，高斯运算可以单独提出来，从而得到LOG算子。\n",
    "![算子模板.png](https://img-blog.csdnimg.cn/20190406153355605.png)\n",
    "        图所示常用5 * 5模板\n",
    "        该算子先平滑噪声在进行边缘检测，效果要好于sobel算子。\n",
    "        \n",
    "        python实现\n",
    "        Laplacian(src, dst, ddepth, ksize, scale, delta, borderTyper)\n",
    "        \n",
    " ### Canny算子\n",
    "        Canny算子在使用卷积操作进行图像平滑的同时计算微分，计算出相应的幅值和方向，对幅值进行非极大值抑制，最后进行自动边缘连接。\n",
    "        canny算子对噪声不敏感，可以有效检测边缘，对于间断边缘可以自动连接，消除虚检边缘。\n",
    "\n",
    "        处理过程:\n",
    " ![平滑.png](https://img-blog.csdnimg.cn/20190529154505346.png)\n",
    " 先使用高斯函数一阶导数同时完成平滑和微分\n",
    " ![梯度.png](https://img-blog.csdnimg.cn/20190529154610257.png)\n",
    " 对高斯函数进行x方向和y方向求微分，即x和y方向求梯度，可以得到梯度幅值和方向\n",
    " ![离散化.png](https://img-blog.csdnimg.cn/20190529154646273.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMxMjM5NDk1,size_16,color_FFFFFF,t_70)\n",
    " 离散化为8个方向\n",
    " ![幅值非极大值抑制.png](https://img-blog.csdn.net/20180608162236836?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ptdTIwMTUyMTEyMTAyMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)\n",
    " 使用3 * 3的领域，对中心像素沿梯度方向两个梯度幅值差值比较，仅保留极大值点\n",
    "![边缘连接.png](https://img-blog.csdnimg.cn/20190529154852165.png)\n",
    "![边缘连接.png](https://img-blog.csdnimg.cn/20190529154900920.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMxMjM5NDk1,size_16,color_FFFFFF,t_70)\n",
    "使用分段函数，将像素值进行边缘连接\n",
    "t1对应假边缘\n",
    "t2对应连接：临接像素中是否有属于t3的像素\n",
    "t3对应真边缘，全部保留\n",
    "\n",
    "        python实现\n",
    "        \n",
    "        Canny(image, edges, threshold1, threshold2, apertureSize=3, L2gradient)\n",
    "        #image输入图像\n",
    "        #edges输出边缘\n",
    "        #threshold1 x边缘阈值\n",
    "        #threshold2 y边缘阈值\n",
    "   ## 3. 简述图像直方图的基本概念，及使用大津算法进行图像分割的基本原理\n",
    "        图像直方图：统计各个灰度级别在图像中的出现次数或概率，并用直方图显示出来，一般直方图显示图像数据时会以左暗又亮的分布曲线形式呈现出来；具有图像平移、旋转、缩放不变性等众多优点，直方图在进行图像计算处理时代价较小，所以经常用于图像处理\n",
    "\n",
    "        大津算法：遍历灰度取值，设定最佳阈值，使得背景和目标之间的类间方差值最大（因为二者差异最大），不适用灰度渐变的场景的场景。\n",
    "        记t为前景与背景的分割阈值，前景点数占图像比例为w0，平均灰度为u0；背景点数占图像比例为w1，平均灰度为u1。\n",
    "        则图像的总平均灰度为：u=w0u0+w1u1。\n",
    "        前景和背景图象的方差：g=w0*(u0-u)(u0-u)+w1(u1-u)(u1-u)=w0w1*(u0-u1)*(u0-u1),此公式为方差公式。\n",
    "        当方差g最大时，可以认为此时前景和背景差异最大，此时的灰度t是最佳阈值sb = w0w1(u1-u0)*(u0-u1)\n",
    "   ## 4.简述Harris算子对角点的定义，进行角点检测的基本原理，并说明引入角点响应函数的意义。\n",
    "        角点：是一类含有足够信息且能从当前帧和下一帧中都能提取出来的点。\n",
    "        Harris算子（角点定义）：如果某一点在任意方向的一个微小变动都会引起灰度很大的变化，那么我们就把它称之为角点\n",
    "        Harris算子（角点检测）：在图像中设计一个局部检测窗口，当该窗口沿各个方向做微小移动时，考察窗口的平均能量变化，当该能量变化超过设定的阈值时，就将窗口的中心像素点提取为角点。\n",
    "        引入角点响应函数的意义是将原有的灰度积分函数结果划分更为直观和方便，通过比较最终的R的值即可判断该点是否为角点\n",
    "\n",
    "   ## 5. 简述Hough变换的基本原理(包括参数空间变换及参数空间划分网格统计)。 \n",
    "       Hough变换（参数空间变换）：\n",
    "       在原始图像坐标系下的一个点对应了参数坐标系中的一条直线，同样参数坐标系的一条直线对应了原始坐标系下的一个点，然后，原始坐标系下呈现直线的所有点，它们的斜率和截距是相同的，所以它们在参数坐标系下对应于同一个点。这样在将原始坐标系下的各个点投影到参数坐标系下之后，看参数坐标系下有没有聚集点，这样的聚集点就对应了原始坐标系下的直线。\n",
    "       \n",
    "       Hough变换（参数空间划分网格统计）：\n",
    "       为了检测出直角坐标X-Y中由点所构成的直线，可以将极坐标a-p量化成许多小格。根据直角坐标中每个点的坐标(x,y)，在a = 0-180°内以小格的步长计算各个p值，所得值落在某个小格内，便使该小格的累加记数器加1。当直角坐标中全部的点都变换后，对小格进行检验，计数值最大的小格，其(a，p)值对应于直角坐标中所求直线。\n",
    "\n",
    "   ##  6.简述SIFT原理(重点是尺度空间和方向直方图原理)及ORB算子原理(重点是FAST和BRIEF)。 \n",
    "       SIFT通过高斯函数与原图像进行卷积操作，然后通过采样，得到尺度空间模型\n",
    "       尺度空间原理：在图像信息处理模型中引入一个被视为尺度的参数，通过连续变化尺度参数获得多尺度下的尺度空间表示序列，对这些序列进行尺度空间主轮廓的提取，并以该主轮廓作为一种特征向量，实现边缘、角点检测和不同分辨率上的特征提取等。\n",
    "       方向直方图原理：为了使描述符具有旋转不变性，需要利用图像的局部特征为给每一个关键点分配一个基准方向。使用图像梯度的方法求取局部结构的稳定方向。对于在DOG金字塔中检测出的关键点点，采集其所在高斯金字塔图像3σ邻域窗口内像素的梯度和方向分布特征\n",
    "       \n",
    "       ORB采用FAST算法来检测特征点，拿一个点跟它周围的点比较，如果它和其中大部分的点都不一样就可以认为它是一个特征点。得到特征点后我们需要以某种方式描述这些特征点的属性，这些属性的输出我们称之为该特征点的描述子，ORB采用BRIEF算法来计算一个特征点的描述子。描述子实在在关键点P的周围以一定模式选取N个点对，把这N个点对的比较结果组合起来。\n",
    "\n",
    "\n",
    "       FAST计算过程：\n",
    "       1.从图片中选取一个像素点P，下面我们将判断它是否是一个特征点。我们首先把它的密度（即灰度值）设为Ip。\n",
    "       2.设定一个合适的阙值t ：当2个点的灰度值之差的绝对值大于t时，我们认为这2个点不相同。\n",
    "       BRIEF：\n",
    "       1.以特征点p为中心，取一个大小为s*s的邻域Patch。\n",
    "       2.对局部区块进行高斯平滑。\n",
    "       3.点对采样，采样方式有以下几种。\n",
    "          1）x,y方向平均分布采样\n",
    "          2）x,y均服从Gauss(0,S^2/25)各向同性采样\n",
    "          3）x服从Gauss(0,S^2/25)，y服从Gauss(0,S^2/100)采样\n",
    "          4）x,y从网格中随机获取\n",
    "       4.取N对点对，得到N个二进制码，组成一个N为向量\n",
    " \n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
